package com.tengju.settlement.domain.service;

import com.tengju.settlement.domain.model.account.UserIdCode;
import com.tengju.settlement.domain.model.depository.*;

import java.util.List;

/**
 * @author: 大木
 * @date: 2021/12/6 10:34 上午
 */
public interface RemotePaymentService {

    /**
     * 申请开户, 拿到平安虚户号 depositoryId
     *
     * @param openAccountForm 开户表单
     * @return {@link String}
     */
    String applyOpenAccount(DepositoryOpenAccountForm openAccountForm);

    /**
     * 查询成功开户的账户信息
     *
     * @param license 证件参数
     * @return {@link DepositoryAccount}
     */
    DepositoryAccount getOpenAccountSuccessInfo(License license);

    /**
     * 申请绑卡
     *
     * @param bindCardForm 绑卡参数
     * @return {@link Boolean}
     */
    BindCardResult applyBindCard(DepositoryBindCardForm bindCardForm);

    /**
     * 账户鉴权校验
     *
     * @param verifyFrom 鉴权参数
     * @return {@link Boolean}
     */
    DepositoryVerifyResponse bindCardVerify(DepositoryVerifyFrom verifyFrom);

    /**
     * 获得支持银行信息列表
     *
     * @param cardType 绑卡账户类型
     * @return {@link List}<{@link BankInfo}>
     */
    List<BankInfo> getSupportBankList(BankCardType cardType);

    /**
     * 获取已绑定的银行卡列表
     *
     * @param depositoryId 存管id (虚户账号)
     * @return {@link List}<{@link DepositoryBankCard}>
     */
    List<DepositoryBankCard> getBoundCardList(String depositoryId);



    /**
     * 获得存管的开户,绑卡,服务费签约 的Abm侧聚合信息
     *
     * @param idCode idCode
     * @param type   账户渠道类型
     * @return {@link AbmDepositoryAggregatedInfo}
     */
    AbmDepositoryAggregatedInfo getAbmAggregatedInfoForDepository(UserIdCode idCode, DepositoryChannel type);


}
